part one Flow 的快速介绍
boolean
描述boolean
值
1 | var isFetching: boolean = false; |
number
number 包含了Infinity
和NaN
1 | var luckyNumber: number = 10; |
string:
1 | var myName: string = 'Preethi'; |
null
1 | var data: null = null; |
void
1 | var data: void = undefined; |
Array
可以用Array<T>
描述数组的元素类型, 例如下面
1 | var messages: Array<string> = ['hello', 'world', '!']; |
object
可以定义对象的规格:
1 | var aboutMe: { name: string, age: number } = { |
function
1 | var calculateArea = (radius: number): number => { |
异步函数也可以添加类型
1 | async function amountExceedsPurchaseLimit( |
type alias
可以组合现有的类型,创建新的类型
1 | type PaymentMethod = { |
上面创建了一个新的类型PaymentMethod
,组合了三个类型
现在可以直接使用了:
1 | var myPaypal: PaymentMethod = { |
generics
1 | type GenericObject<T> = { key: T }; |
创建了一个抽象类型T
,现在可以用来表示 numberT
代表number
类型, 以此类推.
part two
规范参数和返回值的类型:
1 |
|
带有说明性质
1 | function calculatePayoutDate( |
很清楚的展示了参数类型,和函数的意图
减少了复杂的错误处理机制代码
有关的错误检查的代码不需要了
1 | const calculateAreas = (radii: Array<number>): Array<number> => { |
可以很放心的实行重构
隔离行为和数据
再来看看calculateAreas
函数
1 | const calculateAreas = (radii: Array<number>): Array<number> => { |
首先我们要考虑数据的类型 ,之后才能考虑具体的操作
减少了整整一类的 bugs.
因为远程获取数据是不可靠的, message 有可能没有数据,所以声明数据为? maybe
类型
1 | type AppState = { |